//------------------------------------------------------------------------------
//SFWK Framework
//Copyright (C) 2011 SQLI

//This program is free software: you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.

//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU General Public License for more details.

//You should have received a copy of the GNU General Public License
//along with this program.  If not, see <http://www.gnu.org/licenses/>.
//------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Objects;
using SFWK.DAO;
using SFWK.Core;
using SFWK.Core.DTO;
using SFWK.Core.ExpressionBuilder;
using System.Linq.Expressions;

namespace SFWK.Services
{
    public abstract class CRUDService<TDataContext> : BaseService, IDisposable
        where TDataContext : ObjectContext, new()
    {
        #region Accessors
        /// <summary>
        /// Access to Entity framework data context
        /// </summary>
        public TDataContext DataContext
        {
            get
            {
                return Repository.DataContext;// EntityFrameworkHelper<TDataContext>.Context;
            }
        }

        private static SFWKEFRepository<TDataContext> _repository;
        public SFWKEFRepository<TDataContext> Repository
        {
            get
            {
                if (_repository == null)
                    _repository = new SFWKEFRepository<TDataContext>();
                if (_repository.DataContext.ContextOptions.LazyLoadingEnabled)
                    _repository.DataContext.ContextOptions.LazyLoadingEnabled = false;
                return _repository;
            }
        }

        #endregion Accessors

        #region Constructor
        public CRUDService()
        {
           
        }
        #endregion
        
        #region IDisposable Members

        public void Dispose()
        {
           
        }

        #endregion        
    }
}

